package com.javasm.springmybatis.task;

import com.javasm.springmybatis.async.AsyncFactory;
import com.javasm.springmybatis.async.AsyncManager;
import com.javasm.springmybatis.entity.Admin;
import com.javasm.springmybatis.service.IAdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @Author：longjinyi
 * @Version：1.0
 * @Date：2021/12/31-8:06
 * @Since:jdk1.8
 * @Description:
 */

//定时加异步
@Component
public class SendEmailTask {

    //接收邮件的邮箱号email和发送的邮件内容code要从ssm数据库中admin表查询，所以这里要注入IAdminService
    @Autowired
    private IAdminService adminService;



    //定时任务
    //每隔5秒钟发送一封邮件
    @Scheduled(cron = "0/5 * * * * *")
    public void sendEmail() {
        //异步任务
        //execute方法里面要传的是线程Runnable接口
        //AsyncFactory调用它里面的sendEmail方法，返回一个线程Runnable接口
        //调用adminService里面的查询admin的list集合的方法
        List<Admin> list = adminService.list();
        list.forEach(item->{
            //这里把发送的邮件内容code写死，数据库里面不好查
            //发送的时候，没有阻塞，所以线程是异步的
            AsyncManager.getInstance().execute(AsyncFactory.sendEmail(item.getEmail(),"66666666"));
        });


        //通过循环100，把核心线程数每个都测出来，看核心线程数是不是20个
        //控制台打印发现，核心线程数不超过20个
//        for (int i = 0; i < 100; i++) {
//            AsyncManager.getInstance().execute(AsyncFactory.sendEmail());
//        }
    }
}
